home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus 2002 #11
/
Amiga Plus CD - 2002 - No. 11.iso
/
Tools
/
Development
/
PowerD
/
powerd
/
examples
/
broker.d
< prev
next >
Wrap
Text File
|
2002-10-28
|
2KB
|
80 lines
// broker.d - small example (originaly from broker.e) with comodities
MODULE 'commodities',
'dos/dos',
'exec/libraries',
'exec/ports',
'libraries/commodities'
ENUM ERR_NONE, ERR_ARG, ERR_BRKR, ERR_CXERR, ERR_LIB, ERR_PORT
RAISE ERR_BRKR IF CxBroker()=NIL,
ERR_LIB IF OpenLibrary()=NIL,
ERR_PORT IF CreateMsgPort()=NIL
DEF broker=NIL,broker_mp=NIL:PTR TO MP,cxsigflag,CXBase
PROC main()
DEF msg
CXBase:=OpenLibrary('commodities.library', 37)
broker_mp:=CreateMsgPort()
broker:=CxBroker([
NB_VERSION,
'RKM broker',
'Broker',
'A simple example of a broker',
0,0,0,
broker_mp,
0]:NewBroker,NIL)
cxsigflag:=1<<broker_mp.SigBit
ActivateCxObj(broker,TRUE)
PrintF('Try Exchange\n')
ProcessMsg()
EXCEPTDO
IF broker THEN DeleteCxObj(broker)
IF broker_mp
WHILE msg:=GetMsg(broker_mp) DO ReplyMsg(msg)
DeleteMsgPort(broker_mp)
ENDIF
IF CXBase THEN CloseLibrary(CXBase)
SELECT exception
CASE ERR_BRKR; PrintF('Error: Could not create broker\n')
CASE ERR_CXERR; PrintF('Error: Could not activate broker\n')
CASE ERR_LIB; PrintF('Error: Could not open commodities.library\n')
CASE ERR_PORT; PrintF('Error: Could not create message port\n')
ENDSELECT
ENDPROC
PROC ProcessMsg()
DEF msg,sigrcvd,msgid,msgtype,done=FALSE
REPEAT
sigrcvd:=Wait(cxsigflag|SIGBREAKF_CTRL_C)
WHILE msg:=GetMsg(broker_mp)
msgid:=CxMsgID(msg)
msgtype:=CxMsgType(msg)
ReplyMsg(msg)
SELECT msgtype
CASE CXM_IEVENT
CASE CXM_COMMAND
PrintF('A command: ')
SELECT msgid
CASE CXCMD_DISABLE; PrintF('CXCMD_DISABLE\n'); ActivateCxObj(broker,FALSE)
CASE CXCMD_ENABLE; PrintF('CXCMD_ENABLE\n'); ActivateCxObj(broker,TRUE)
CASE CXCMD_KILL; PrintF('CXCMD_KILL\n'); done:=TRUE
ENDSELECT
DEFAULT; PrintF('Unknown msgtype\n')
ENDSELECT
ENDWHILE
IF sigrcvd&SIGBREAKF_CTRL_C
done:=TRUE
PrintF('CTRL C signal break\n')
ENDIF
UNTIL done
ENDPROC